package haemers.utils.tests 
{
	import flash.display.MovieClip;
	import nl.haemers.data.constants.DataTypes;
	import nl.haemers.data.utils.ObjectUtils;
	import org.flexunit.Assert;
	/**
	 * ...
	 * @author Jonathan
	 */
	public class ObjectUtilsTest 
	{
		
		/** Public methods **/
		[Test]
		public function testGetCollectionItemClass() : void
		{
			Assert.assertEquals(MovieClip, ObjectUtils.getCollectionItemClass("__AS3__.vec::Vector.<flash.display.MovieClip>"));
			Assert.assertEquals(Object, ObjectUtils.getCollectionItemClass("Array"));
			//NOTE: This is wrong!
			Assert.assertEquals(Object, ObjectUtils.getCollectionItemClass("String"));
		}
		
		[Test]
		public function testGetDataType() : void
		{
			Assert.assertNull(ObjectUtils.getDataType(""));
			Assert.assertEquals(DataTypes.STRING, ObjectUtils.getDataType("test"));
			Assert.assertEquals(DataTypes.BOOLEAN, ObjectUtils.getDataType(true));
			Assert.assertEquals(DataTypes.NUMBER, ObjectUtils.getDataType(-200));
			Assert.assertEquals(DataTypes.NUMBER, ObjectUtils.getDataType(1));
			Assert.assertEquals(DataTypes.NUMBER, ObjectUtils.getDataType(2.50));
			
			Assert.assertEquals(null, ObjectUtils.getDataType(new Array()));
		}
		
		[Test]
		public function testIsDataType() : void
		{	
			Assert.assertTrue(ObjectUtils.isDataType(DataTypes.BOOLEAN));
			Assert.assertTrue(ObjectUtils.isDataType(DataTypes.INT));
			Assert.assertTrue(ObjectUtils.isDataType(DataTypes.NUMBER));
			Assert.assertTrue(ObjectUtils.isDataType(DataTypes.STRING));
			Assert.assertTrue(ObjectUtils.isDataType(DataTypes.UINT));
			
			Assert.assertFalse(ObjectUtils.isDataType(DataTypes.ARRAY));
			Assert.assertFalse(ObjectUtils.isDataType(DataTypes.OBJECT));
			Assert.assertFalse(ObjectUtils.isDataType(DataTypes.DICTIONARY));
			Assert.assertFalse(ObjectUtils.isDataType(DataTypes.VECTOR));
		}
		
		[Test]
		public function testIsCollectionType() : void
		{
			Assert.assertTrue(ObjectUtils.isCollectionType(DataTypes.ARRAY));
			Assert.assertFalse(ObjectUtils.isCollectionType(DataTypes.DICTIONARY));
			Assert.assertTrue(ObjectUtils.isCollectionType(DataTypes.VECTOR));
		}
		
		[Test]
		public function testIsDictionary() : void
		{
			Assert.assertTrue(ObjectUtils.isDictionary(DataTypes.DICTIONARY));
		}
		
		[Test]
		public function testIsNumerical() : void
		{
			Assert.assertTrue(ObjectUtils.isNumerical(200));
			Assert.assertTrue(ObjectUtils.isNumerical( -200));
			Assert.assertTrue(ObjectUtils.isNumerical("200"));
		}
		
		[Test]
		public function testIsVector() : void
		{
			Assert.assertTrue(ObjectUtils.isVector("__AS3__.vec::Vector.<flash.display.MovieClip>"));
			Assert.assertTrue(ObjectUtils.isVector(DataTypes.VECTOR));
		}
		
	}

}